/**
 *
 *
 * @see java.util.concurrent.CopyOnWriteArrayList#add(Object)
 * (1)就是复制一个数组，对复制后产生的新数组进行操作，而旧的数组不会有影响，
 * 所以旧的数组可以依旧就行读取（可以看出来，读的时候如果有新的数据正在写是无法实时的读取到的，有延时，得等新数据写完以后，然后才可以读到新的数据）
 * (2)如果多个线程同时去写，多线程写的时候会Copy出N个副本出来，那么可能内存花销很大，
 * 所以用一个锁ReetrantLock锁住，一次只能一个线程去添加，这个线程是可重入的
 * 总结：添加操作 : 加锁 + 复制一个数组   --》 (1)加锁，避免多个数组副本的产生; (2)对读操作的性能影响比较小，有较小概率读取延迟
 *
 * @date 2020/12/7
 */
package cn.jdemo.juc.collect;